//
//  QRCodeCreateViewController.swift
//  HMWeibo06
//
//  Created by apple on 15/5/15.
//  Copyright (c) 2015年 heima. All rights reserved.
//

import UIKit

class QRCodeCreateViewController: UIViewController {

    @IBOutlet weak var iconImage: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        createQRCode()
    }

    /**
        CoreImage 框架：滤镜，GIF动图，二维码
        CoreGraphics：核心图形，绘图
        
        使用滤镜声成的二维码不清楚
    
        注意：
        1. 不要在二维码中包含过多的文字，生成二维码很耗性能，识别的性能也很差
        2. 生成的头像，不要遮挡住三个定位点
        3. 二维码的识别度高，有一定的容错性！
    */
    private func createQRCode() {
        
        // 建立一个滤镜
        let qrFilter = CIFilter(name: "CIQRCodeGenerator")
        // 重设滤镜的初始值
        qrFilter.setDefaults()
        
        // 通过 KVC 设置滤镜的内容
        qrFilter.setValue("我就是刀哥".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true), forKey: "inputMessage")
        
        // 输出图像
        let ciImage = qrFilter.outputImage
        // 打印生成图片的大小，生成的图像 23 * 23
        println(ciImage.extent())
        
        // 过滤图像单色彩以及`形变`的滤镜
        let colorFilter = CIFilter(name: "CIFalseColor")
        colorFilter.setDefaults()
        
        colorFilter.setValue(ciImage, forKey: "inputImage")
        
        // 不能直接用 UIColor 转换，会崩溃
//        colorFilter.setValue(UIColor.redColor().CIColor, forKey: "inputColor0")
        // 前景色
        colorFilter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: "inputColor0")
        // 背景色
        colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1")
        
        let transform = CGAffineTransformMakeScale(5, 5)
        let transformImage = colorFilter.outputImage.imageByApplyingTransform(transform)
        
        let codeImage = UIImage(CIImage: transformImage)
        let avatarImage = UIImage(named: "avatar")
        
        iconImage.image = insertAvatarImage(codeImage!, avatarImage: avatarImage!)
    }

    // 合成头像图像
    private func insertAvatarImage(codeImage: UIImage, avatarImage: UIImage) -> UIImage {
        
        let size = codeImage.size
        
        // 1. 开启图像的上下文
        UIGraphicsBeginImageContext(size)
        
        // 2. 绘制二维码图像
        codeImage.drawInRect(CGRectMake(0, 0, size.width, size.height))
        
        // 3. 计算头像的大小
        let w = size.width * 0.25
        let h = size.height * 0.25
        let x = (size.width - w) * 0.5
        let y = (size.height - h) * 0.5
        
        avatarImage.drawInRect(CGRectMake(x, y, w, h))
        
        // 4. 从上下文中取出图像
        let image = UIGraphicsGetImageFromCurrentImageContext()
        
        // 5. 关闭上下文
        UIGraphicsEndImageContext()

        return image
    }
}
